/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ve.usb.cep.actions;
 
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import java.util.Map;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException;

import ve.usb.cep.db.domainObjects.Usuario;
import ve.usb.cep.db.models.UsuarioModel;
import ve.usb.cep.db.modelExceptions.UsuarioException;
import ve.usb.cep.util.Hash;
 
public class LoginA extends ActionSupport {

    protected String correo = "";
    protected String clave = "";
    protected String attempt = "0";
    protected Usuario u;

    @Override
    public String execute(){

        if (!attempt.equals("1")){
            return "input";
        }

        Map session = ActionContext.getContext().getSession();
        session.put("user", u);

        return "success";
    }

    @Override
    public void validate()
    {
        if (!attempt.equals("1")){
          return;
        }

        if (correo.length() == 0){
           addFieldError("correo", "Debe especificar un correo para iniciar sesión");
        }
        if (clave.length() == 0){
           addFieldError("clave", "Debe especificar una contraseña para iniciar sesión");
        }

        if (correo.length() == 0 || clave.length() == 0){
            return;
        }

        try{
            u = new UsuarioModel().getByCorreo(correo);
        }catch(UsuarioException e){
            //Nunca deberíamos alcanzar este lugar
            addActionError("Error en la base de datos");
            e.printStackTrace();
        }

        if (null == u){
            addActionError("El usuario/contraseña no son válidos");
            return;
        }

        try{
            if (!Hash.comparePsw(clave, u.getClave())){
                addActionError("El usuario/contraseña no son válidos");
                return;
            }
        }catch(UnsupportedEncodingException e){
            //Nunca deberíamos alcanzar este lugar
            addActionError("La clave no puede se interpretada bajo la codificación escogida");
            e.printStackTrace();
        }catch(NoSuchAlgorithmException e){
            //Nunca deberíamos alcanzar este lugar
            addActionError("El algoritmo de hash para cifrar la clave no existe.");
            e.printStackTrace();
        }
    }
    public String getClave() {
        return this.clave;
    }    
    public void setClave(String clave) {
        this.clave = clave;
    }

    public String getCorreo() {
        return this.correo;
    }
    public void setCorreo(String correo) {
        this.correo = correo;
    }

    public String getAttempt() {
        return this.attempt;
    }
    public void setAttempt(String attempt) {
        this.attempt = attempt;
    }
    
}
